/**
 * 将横杠分隔的字符串转换为驼峰字符串。
 * @param {string} str - 需要转换的横杠分隔字符串。
 * @returns {string} 转换后的驼峰字符串。
 */
export function hyphenToCamelCase(str) {
	return str.replace(/-([a-z])/g, function(match, letter) {
		return letter.toUpperCase();
	});
}

/**
 * json对象转路由参数字符串
 * @param {*} json 
 * @returns 
 */
export function jsonToQuery(json) {
	const query =  Object.keys(json).map(function(key) {
		return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]);
	}).join('&')
	return !query ? '' : ('?' + query)
}

/**
 * url中的参数转为 json
 * @param {*} url 
 * @returns 
 */
export function getUrlParams(url) {
	// 匹配 ?后面的参数部分
	const regex = /\?(.*)$/; 
	const matchs = regex.exec(url)
	if(!Array.isArray(matchs) || matchs.length < 2) {
		return {}
	}
	const params = matchs[1]
	if(!params) return {}
  
	// 将参数字符串转为JSON
	try {
		return JSON.parse('{"' + decodeURI(params).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
	} catch (error) {
		return {}
	}
}

/**
 * 从url中读取出所有的query对象
 * 仅适用于h5环境下，因为这里通过 window.location.href 读取
 * @returns 
 */
export function readRouteQuery () {
    // #ifdef H5
    const url = window.location.href
    const urlSplit = url.split('?')
    let routeParams = {}
    if(urlSplit.length > 0) {
        urlSplit.forEach(s => {
            routeParams = {...routeParams, ...getUrlParams('?'+s)}
        })
		Object.keys(routeParams).forEach(k => {
			routeParams[k] = routeParams[k] === 'null' ? null : routeParams[k]
		})
        return routeParams
    }
    return {}
    // #endif

    // #ifndef H5
    return {}
    // #endif
}

/**
 * 读取路由path
 * @returns 
 */
export function readRoute () {
    // #ifdef H5
    const url = window.location.href
	const origin = window.location.origin + '/'
    const urlSplit = url.split('?')
    if(urlSplit.length > 0) {
        return urlSplit[0].replace(origin, '')
    }
    return ''
    // #endif

    // #ifndef H5
    return ''
    // #endif
}